$( document ).ready(function() {
	$("[data-rodada]").click( onClickMudarRodada );
	$("input[data-function='enviarResultado']").click( onClickEnviarResultado );
});

function onClickMudarRodada() {
	
	var rodadaEscolhida = getRodadaEscolhida($(this));
	desabilitarOuHabilitarBotaoNavegacao(rodadaEscolhida);

	var dataToSend = {"rodada": rodadaEscolhida};
	$.ajax({
		type		: "POST",
		url			: "admin/resultadosAjax.do",
		data		: dataToSend, 
		success 	: function(data) { 
			$(".tabela-jogos > tbody").html(data);
			$("[data-rodada='combo']").val(rodadaEscolhida);
			$("input[data-function='enviarResultado']").click( onClickEnviarResultado );
		},
		error:function (data) { showMsg( MSG_ERRO_CHAMADA_AJAX ); }
	});
}

function getRodadaEscolhida(self) {
	if (self.attr("data-rodada") == "proxima")  { return parseInt($("[data-rodada='combo']").val())+1; }
	if (self.attr("data-rodada") == "anterior")	{ return parseInt($("[data-rodada='combo']").val())-1; }
	else	{ return self.val(); }
}

function desabilitarOuHabilitarBotaoNavegacao(rodadaEscolhida){
	var primeiraRodada = 1;
	var ultimaRodada = 38;
	
	$("[data-rodada='anterior'],[data-rodada='proxima']").attr("disabled", false);
	
	if (rodadaEscolhida == primeiraRodada)
		$("[data-rodada='anterior']").attr("disabled", true);
	else 
	if (rodadaEscolhida == ultimaRodada)
		$("[data-rodada='proxima']").attr("disabled", true);
}

function onClickEnviarResultado(){
	var context = $(this).parents( "tr" );
	var dataToSend = context.find(":input").serialize();

	if(!validarCamposRequired(context.find("input[type='number']"))){
		setStatusLancamentoResultado( context, "erro" );
		return; 
	}

	mudarCursorAposEnviarResultado(context);
	$(this).attr("disabled", true);
	setStatusLancamentoResultado( context, "loading" );

	$.ajax({
		type		: "POST",
		url			: "admin/enviarResultado.do",
		data		: dataToSend, 
		success 	: function(data) { tratarRetornoEnviarResultado(data, context) },
		error 		: function(data) { tratarRetornoEnviarResultado(data, context) }
	});
}

function mudarCursorAposEnviarResultado(context) {
	if( context.next().length != 0 )
		context.next().find("input[type='number']").first().focus();
	else
		$("[data-rodada='proxima']").focus();
}

function tratarRetornoEnviarResultado(data, context){
	context.find("input[data-function='enviarResultado']").attr("disabled", false);
	if( data == "success" ){
		setStatusLancamentoResultado( context, "lancado" );
	} else {
		setStatusLancamentoResultado( context, "erro" );
	}
}

function validarCamposRequired(campos){
	var existeCampoVazio = false;
	
	$(campos).each(function(){
		if($(this).val() == ""){
			existeCampoVazio = true;

			$(this).addClass("invalido")
				   .focusin(function() { $(this).removeClass("invalido"); });
		}
	});
	
	return !existeCampoVazio;
}

function setStatusLancamentoResultado( context, status ){
	var divStatus = context.find("[data-status]");
	
	switch ( status ) {
	case "loading":
		divStatus.attr("data-status", "loading").removeAttr("title");
		break;
	case "lancado":
		divStatus.attr("data-status", "lancado").attr("title", "Resultado Lan\u00e7ado");
		break;
	case "erro":
		divStatus.attr("data-status", "erro").attr("title", "Erro ao lan\u00e7ar o resultado");
		break;
	}
}
